#region (c) 2014 THN Solutions LLC. - All rights reserved
/*
THN DATA ABSTRACTION LAYER version 1

Copyright (c) 2014, THN Solutions LLC. ( www.ThnSolutions.com )
Author: Nguyễn, M. Hải                 ( www.Minh-Hai.com     )
All rights reserved.

This library is dual-licensed.
  + For commercial software, please obtain a commercial license from THN Solutions LLC.

  + For free software, this library is licensed under GPL version 3. A summary of GPLv3 is
    listed below. You should also find a copy of GPLv3 as file License_GPLv3.txt included
	with the source-code files.

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License version 3 as published by
    the Free Software Foundation  of the License.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
#endregion

#region Using directives
using System;
using System.Collections;
#endregion

namespace Thn.Data.Query
{
    /// <summary>
    /// Represents the Insert expression
    /// </summary>
    public class InsertQuery : QueryBase
    {
        #region InsertClause
        private object mInsertClause;
        /// <summary>
        /// Gets data object(s) to insert to database
        /// <para>This can be a single object, an array of object, or a collection.</para>        
        /// </summary>
        public object InsertClause
        { get { return mInsertClause; } }
        #endregion       

        #region Constructors
        /// <summary>
        /// Create a new insert query for an array of objects
        /// </summary>
        public InsertQuery(params object[] values)
        {
            mInsertClause = values;
        }

        /// <summary>
        /// Create a new insert query for a collection of objects
        /// </summary>
        public InsertQuery(ICollection values)
        {
            mInsertClause = values;
        }
        #endregion

        #region To String
        /// <summary>
        /// Convert this query to text form.
        /// <para>NOTE: Do not use this method to obtain the SQL query. It will not be correct.</para>
        /// </summary>
        public override string ToString()
        {
            System.Text.StringBuilder sb = new System.Text.StringBuilder();

            //INSERT
            if (mInsertClause != null)
            {
                sb.Append("INSERT ");

                if (mInsertClause is Array)
                {
                    object[] objects = (object[])mInsertClause;
                    for (int i = 0; i < objects.Length; i++)
                    {
                        if (i > 0) sb.Append(", ");
                        sb.Append(objects[i].ToString());
                    }
                }
                else if (mInsertClause is IList)
                {
                    IList lst = (IList)mInsertClause;
                    for (int i = 0; i < lst.Count; i++)
                    {
                        if (i > 0) sb.Append(", ");
                        sb.Append(lst[i].ToString());
                    }
                }
                else sb.Append(mInsertClause.ToString());
            }
            return sb.ToString();
        }
        #endregion
    }
}
